import router from './router'
import store from './store'
import NProgress from 'nprogress'
import { getToken } from '@/utils/auth'

const someNeedAuth = (routers) => {
  return routers.some(r => (r.meta && r.meta.auth))
}

router.beforeEach((to, from, next) => {
  NProgress.start()

  // 已登录的情况下
  if (getToken()) {
    // 访问登录页，直接跳转到首页
    if (to.name === 'login') {
      next({ path: '/' })
      NProgress.done()
      // 否则判断是否要否要拉取用户信息
    } else {
      if (!store.getters.name) {
        store
          .dispatch('GetInfo')
          .then(() => {
            next()
          })
          .catch(() => {
            NProgress.done()
            next(false)
          })
      } else {
        next()
      }
    }
    // 没有登录，但是访问需要登录的页面，则跳转到登录页
  } else if (someNeedAuth(to.matched)) {
    next(`/login?redirect=${to.path}`)
    NProgress.done()
    // 没有登录，且访问不需要登录的页面，则直接访问
  } else {
    next()
  }
})

router.afterEach(() => {
  NProgress.done() // 结束Progress
})
